package org2.jogo.models;

import android.content.ContentValues;
import android.database.Cursor;

public class Pergunta {

    private String descricao;
    private int respostaCerta;
    private String[] respostas;
    private int respostaMarcada = -1;
    private int dificuldade;
    private float tempoResposta;
    private boolean criadaPeloUsuario = false;
    private static final String TABLE_NAME = "perguntas";

    public Pergunta(String descricao, String[] respostas, int respostaCerta, int dificuldade) {
        this.descricao = descricao;
        this.respostas = respostas;
        this.respostaCerta = respostaCerta;
        this.dificuldade = dificuldade;
    }

    private Pergunta() {
        respostas = new String[4];
    }

    public static Pergunta getFromCursor(Cursor c) {
        Pergunta pergunta = new Pergunta();
        pergunta.descricao = c.getString(c.getColumnIndexOrThrow("texto"));
        for (int i = 1; i <= 4; i++) {
            pergunta.respostas[i - 1] = c.getString(c.getColumnIndexOrThrow("alternativa" + i));
        }
        pergunta.respostaCerta = c.getInt(c.getColumnIndexOrThrow("alternativa_correta"));
        pergunta.dificuldade = c.getInt(c.getColumnIndexOrThrow("dificuldade"));
        pergunta.criadaPeloUsuario = c.getShort(c.getColumnIndexOrThrow("customizada")) == 1 ? true : false;
        return pergunta;
    }

    public ContentValues getContentValues() {
        ContentValues valores = new ContentValues();
        valores.put("texto", descricao);
        valores.put("alternativa1", respostas[0]);
        valores.put("alternativa2", respostas[1]);
        valores.put("alternativa3", respostas[2]);
        valores.put("alternativa4", respostas[3]);
        valores.put("alternativa_correta", respostaCerta);
        valores.put("dificuldade", dificuldade);
        valores.put("customizada", criadaPeloUsuario);
        return valores;
    }

    public boolean isCustomizada() {
    	return criadaPeloUsuario;
    }
    
    public void setCustomizada(boolean customizada) {
        criadaPeloUsuario = customizada;
    }
    
    public boolean jaFoiMarcada() {
        return (respostaMarcada != -1);
    }

    public boolean acertada() {
        return (respostaMarcada == respostaCerta);
    }

    public String[] getRespostas() {
        return respostas;
    }

    public String getDescricao() {
        return descricao;
    }

    /**
     * Guarda a resposta marcada pelo jogador na pergunta
     * 
     * @param alternativa A alternativa marcada pelo jogador
     * @param tempoResposta O tempo que o jogador levou para marcar a resposta, em segundos
     */
    public void setResposta(int alternativa, float tempoResposta) {
        respostaMarcada = alternativa;
        this.tempoResposta = tempoResposta;
    }

    /**
     * Retorna a pontuação da pergunta, baseada no tempo de resposta e numa constante multiplicadora, que varia de
     * acordo com a dificuldade.
     * 
     * @param tempoLimite Tempo total que o jogador tem para responder
     * @param multiplicador Variável de dificuldade
     * @return A pontuação da pergunta, que é 0 se o jogador errar e entre 0 e 10 se ele acertar, dependendo do tempo de
     *         resposta.
     */
    public float getPontuacao(float tempoLimite, float tempoTolerancia, int multiplicador) {
        if (respostaCerta == respostaMarcada) {
            if (tempoResposta <= tempoTolerancia)
                return 10;
            return ((tempoLimite - tempoResposta) * multiplicador) / 4;
        }
        return 0;
    }

    public static String getTableName() {
        return TABLE_NAME;
    }

    public static String getTableCreationSQL() {
        return "create table " + TABLE_NAME + " (_id integer primary key autoincrement," +
                  "texto text not null, alternativa1 text not null, alternativa2 text not null, alternativa3 " +
                  "text not null, alternativa4 text not null, alternativa_correta integer, " +
                  "dificuldade integer, customizada boolean);";
    }
}
